/***************************************************************************

-------------------
    begin                : 
    copyright            : kuzkok
    email                : kuzkok at gmail.com

***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*   
*   Данная программа является свободным программным обеспечением;         *
*   Вы можете распространять ее и/или модифицировать в соответствии с     *
*   GNU General Public License опубликованной Фондом свободного           *
*   программного обеспечения; используемая версия лицензии - 2 или        *
*   (по вашему выбору) любая более поздняя                                *
***************************************************************************/

#ifndef APDMOBJECT_H
#define APDMOBJECT_H

#include <QObject>
#include <QUuid>
#include <QtSql>

class APDMObject : public QObject
{
    Q_OBJECT

public:    
    static QVariant UuidToVariant(const QUuid theUuid)
    {
        return theUuid.isNull()?NULL:theUuid.toString();
    }

    QUuid findObjectID(QString field, QVariant value);

    explicit APDMObject(QString theTableName);
    APDMObject(QUuid theEventID, QString theTableName);
    APDMObject(QString theTableName, QString whereclause);
    ~APDMObject();

    enum ObjectStates
    {
        OSInvalid = 0,
        OSNew,
        OSOld
    };

    QUuid eventID()
    {
        return mEventID;
    }

    ObjectStates objectState()
    {
        return mObjectState;
    }

signals:

public slots:
    bool deleteObject();
    bool saveObject();

protected:
    ObjectStates mObjectState;
    QSqlQuery *mSelectQuery;

    virtual void buildUpdateStatement();
    virtual void buildInsertStatement();
    virtual void bindQueryValues(QSqlQuery &query);

    QString mUpdateStatement;
    QString mInsertStatementFields, mInsertStatementValues;

private:
    QUuid mEventID;
    QString mTableName;

};

#endif // APDMOBJECT_H
